#pragma once

#include <QString>
#include <QVariant>
#include <QJsonObject>
#include "PluginStruct.h"
class IFunctionPlugin;
class IUIPlugin;

class ICore
{
public:
    virtual ~ICore() = default;

    // 插件加载
    virtual bool loadPluginsFromRootDirectory(const QString& rootDir) = 0;

    // 插件查询
    virtual IUIPlugin* getUIPlugin(const QString& pluginId) const = 0;
    virtual IFunctionPlugin* getFunctionPlugin(const QString& pluginId) const = 0;
    virtual QStringList listUIPluginIds() const = 0;
    virtual QStringList listFunctionPluginIds() const = 0;

    // 插件间通信（发布/订阅）
    virtual void subscribeEvent(const QString& eventName,
                                std::function<void(const PluginInfo&)> callback) = 0;
    virtual void publishEvent(const PluginInfo& event) = 0;

    // 插件日志，带插件ID标识
    virtual void logMessage(const QString& pluginId, const QString& message) = 0;

    // 以后可扩展其他接口
};
